C和C++中&和&&,|和||的区别

来源:百度知道 编辑:UC知道 时间:2024/05/30 01:38:17
我所知道的是&&和||是逻辑运算 一般在条件表达式里将多个变量与、或在一起求真假
而&和|是位运算符 书里只说了 &用在二进制数字之间的与运算
看来又看到它们又把一些标识符与、或在一起
比如:
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS

就不知道这些标示符与、或在一起代表什么呢

请各位前辈用自己的比较通俗的话解说 一般从哪里复制过来 的东东都 比较难理解
谢谢
zjl880310你说的这些大家都知道 我想知道的是按位运算用在标示符里是什么结果
incubus_w 你说的和我的理解差不多 它们是有各自的值 但是那些标示符各自都代表一样东西 把它们给按位运算后就剩下一个值了 那剩下一个值 就只代表一样东西 这样意思好像就变了
我的理解是我们用标示符来代表各种样式 虽然机器最后 是把所有的东西都变成值 但是我们用标示符时不可能把它当成值来用 我们需要的是它们代表的意思 而不是它们的值 如果把它们当成值来按位运算 那我就想不通运算后的结果是什么

wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS
按位“或”,按位加。

表示信息的方法。
上面style,例如有8位2进制数:xxxx xxxx
右第一位为1表示,水平向重画,0表示 水平向不 重画
右第二位为1表示,垂直向重画,0表示 垂直向不 重画
右第4位为1表示,双击。0表示 非双击

CS_HREDRAW = 0000 0001
CS_VREDRAW = 0000 0010
CS_DBLCLKS = 0000 1000

CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS
等于 0000 0001 | 0000 0010 | 0000 1000
等于 0000 1011

按位与常用于从一个整数中取某(些)位。

例如是否水平向重画

wndclass.style & 0000 0001 -- 取右第1位,若为1则重画,若为0 不重画

wndclass.style & 0000 0010 -- 取右第2位, 若为1则垂向重画。

我想应该是一种压缩提高效率的方法
举个例子吧,
为了在一个4字节的整型中传递4个参数,而且都是布尔型的,那么就可以利用一个整型的4个byte各放一个boolean的值。
那么,二进制表示的ABCD就分别代表了A、B、C、D四个变量的值,例如
x = 9就代表1001,即a=true,b=false,c=false,d=true

然后,为了方便记忆每个位上代表的是什么符号,就人为设定一些标志,例如varA=8, varB=4, varC=2, varD=1
这样就表达了A、B、C、D四个选项。

又考虑到有可能出现重复的情况,即某个标识符表示同时选AC两个选项,那么就有个标识符叫做varAC=10;同样,比如说varBC=6,等等

那么,这个函数在参数传递的时候,就可以用过取每一位而迅速获得